home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Freeware / Ultra Defrag 2 / ultradefrag-2.0.0.bin.i386.exe / scripts / udsorting.js < prev   
Text File  |  2008-03-25  |  4KB  |  165 lines

  1. /*
  2. * Ultra Defragmenter report sorting engine.
  3. * Copyright (C) 2008 by Dmitri Arkhangelski (dmitriar@gmail.com).
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program; if not, write to the Free Software
  17. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. */
  19.  
  20. /*
  21. * Interface:
  22. *    1. init_sorting_engine()
  23. *    2. sort_items(criteria), where criteria is 
  24. *        {"fragments" | "size" | "name" | "comment"}
  25. */
  26.  
  27. /* Mozilla 1.5.0 and IE 5.0  were tested. */
  28. /* IE 3.0 is not supported. */
  29.  
  30. /* global variables */
  31. var table;
  32. var whitelist;
  33. var blacklist;
  34. // order = 0 - descending; 1 - ascending
  35. // TODO: set initial values to more useful states
  36. var order = 0;
  37. var fragments_order = 1;
  38. var size_order = 0;
  39. var name_order = 0;
  40. var comment_order = 1;
  41. var msie_browser = false; // true for ms internet explorer
  42.  
  43. var x; // for debugging purposes
  44.  
  45. // TODO: get this from html page
  46. var table_head =
  47. "<table id=\"main_table\" border=\"1\" color=\"#FFAA55\" cellspacing=\"0\" width=\"100%\">";
  48.  
  49. function init_sorting_engine()
  50. {
  51.     table = document.getElementById("main_table");
  52.     //alert(window.navigator.appName);
  53.     if(window.navigator.appName == "Microsoft Internet Explorer")
  54.         msie_browser = true;
  55. }
  56.  
  57. function sort_items(criteria)
  58. {
  59.     var i;
  60.     whitelist = "";
  61.     blacklist = "";
  62.     var a = new Array();
  63.     
  64.     var items = table.getElementsByTagName("tr");
  65.     var header = "<tr>" + items[0].innerHTML + "</tr>\n";
  66.  
  67.     // convert collection to array
  68.     for(i = 1; i < items.length; i++)
  69.         a[i-1] = items[i];
  70.  
  71.     // sort items
  72.     // Note that sorting is slow: about 1.5 seconds for 550 items on 1.8GHz CPU.
  73.     if(criteria == 'fragments'){
  74.         a.sort(sort_by_fragments);
  75.         fragments_order = fragments_order ? 0 : 1;
  76.     } else if(criteria == 'name'){
  77.         a.sort(sort_by_name);
  78.         name_order = name_order ? 0 : 1;
  79.     } else if(criteria == 'comment'){
  80.         a.sort(sort_by_comment);
  81.         comment_order = comment_order ? 0 : 1;
  82.     } else {
  83.         return; // invalid criteria
  84.     }
  85.     //alert(x);
  86.     //dump_array_of_items(a);
  87.  
  88.     // loop through the array of sorted items
  89.     for(i = 0; i < a.length; i++){
  90.         var data = a[i].innerHTML;
  91.         if(a[i].className == "u")
  92.             whitelist += "<tr class=\"u\">" + data + "</tr>\n";
  93.         else
  94.             blacklist += "<tr class=\"f\">" + data + "</tr>\n";
  95.     }
  96.  
  97.     // replace old contents with new sorted
  98.     if(!msie_browser){
  99.         table.innerHTML = header + whitelist + blacklist;
  100.     } else {
  101.         // On f...ed Internet Explorer table.innerHTML is read only !!!
  102.         // and we need to replace the whole table ...
  103.         document.getElementById("for_msie").innerHTML =
  104.             table_head + header + whitelist + blacklist + "</table>";
  105.         table = document.getElementById("main_table");
  106.     }
  107. }
  108.  
  109. function sort_by_fragments(a,b)
  110. {
  111.     var fa = parseInt(a.getElementsByTagName("td")[0].innerHTML);
  112.     var fb = parseInt(b.getElementsByTagName("td")[0].innerHTML);
  113.  
  114.     if(fragments_order)
  115.         return (fa - fb);
  116.     else
  117.         return (fb - fa);
  118. }
  119.  
  120. function sort_by_name(a,b)
  121. {
  122.     var na = a.getElementsByTagName("td")[1].innerHTML.toLowerCase();
  123.     var nb = b.getElementsByTagName("td")[1].innerHTML.toLowerCase();
  124.     var result;
  125.     if(na > nb) result = 1;
  126.     else if(na == nb) result = 0;
  127.     else result = -1;
  128.     
  129.     if(name_order)
  130.         return -result;
  131.     else
  132.         return result;
  133. }
  134.  
  135. function sort_by_comment(a,b)
  136. {
  137.     var ca = a.getElementsByTagName("td")[2].innerHTML.toLowerCase();
  138.     var cb = b.getElementsByTagName("td")[2].innerHTML.toLowerCase();
  139.     var result;
  140.     if(ca > cb) result = 1;
  141.     else if(ca == cb) result = 0;
  142.     else result = -1;
  143.     
  144.     if(comment_order)
  145.         return -result;
  146.     else
  147.         return result;
  148. }
  149.  
  150. // for debugging purposes
  151. function dump_table()
  152. {
  153.     alert(table.innerHTML);
  154. }
  155.  
  156. function dump_array_of_items(a)
  157. {
  158.     var i;
  159.     var result = "";
  160.     
  161.     for(i = 0; i < a.length; i++)
  162.         result += a[i].innerHTML + "\n";
  163.     alert(result);
  164. }
  165.